package com.wlsk.license.service;

import com.wlsk.license.common.result.Result;
import com.wlsk.license.dto.BaseUserReqDto;
import com.wlsk.license.dto.UploadFileReqDto;
import com.wlsk.license.dto.UploadFileReqDto2;
import com.wlsk.license.dto.request.*;
import com.wlsk.license.dto.response.*;

/**
 * <p>
 * 包车牌管理控制接口牌
 * </p>
 *
 * @author liuzhangbin
 * @since 2025-08-26
 */
public interface IPlateManageService {

    /**
     * 根据经营许可证号获取业主信息
     *
     * @param reqDto
     * @return
     */
    Result<GetPlateOwnerReturnDto> getOwnerInfo(PlateOwnerReqDto reqDto);

    Result<GetPlateOwnerReturnDto> getOwnerInfo2(GetOwnerInfoReqDto reqDto);
    /**
     * 反馈业户信息
     *
     * @param reqDto
     * @return
     */
    Result<PlateOwnerPostResultDto> postOwnerInfo(PlateOwnerPostReqDto reqDto);

    /**
     * 获取行政区划
     *
     * @param reqDto
     * @return
     */
    Result<?> getCitiesDj(CityCodeReqDto reqDto);


    /**
     * 反馈运管运次信息
     *
     * @param reqDto
     * @return
     */
    Result<?> postTransportatinCycle(PostPlateLineReqDto reqDto);

    /**
     * 通过车牌号和经营许可证查询车辆信息
     *
     * @param reqDto
     * @return
     */
    Result<CarInfoReturnDto> getCarInfo(CarInfoReqDto reqDto);

    /**
     * 通过包车牌主键id
     *
     * @param reqDto
     * @return
     */
    Result<CarInfoReturnDto> getCarInfo2(CarInfoReq2Dto reqDto);

    /**
     * 反馈车辆信息
     * @param reqDto
     * @return
     */
    Result<PostCarInfoResultDto> postCarInfo(PostCarInfoReqDto reqDto);

    /**
     * 获取运次信息
     * @param reqDto
     * @return
     */
    Result<PlateLineInfoResultDto> getTransportatinCycle(GetTransportatinCycleReq reqDto);

    /**
     * 根据业户ID和驾驶员从业资格证查询驾驶员信息
     *
     * @param reqDto
     * @return
     */
    Result<GetDriveInfoReturnDto> getDriverInfo(DriverInfoReqDto reqDto);

    /**
     * 通过包车牌主键id查询驾驶员信息
     *
     * @param reqDto
     * @return
     */
    Result<GetDriveInfoReturnDto2> getDriverInfo2(DriverInfoReq2Dto reqDto);

    /**
     * 反馈驾驶员信息
     *
     * @param reqDto
     * @return
     */
    Result<?> postDriver(PostDriverInfoReqDto reqDto);

    /**
     * 分页查询包车牌信息
     *
     * @param reqDto
     * @return
     */
    Result<?> getPlatePageList(PlatePageReqDto reqDto);

    Result<?> deleteDriver(DelDriverReqDto reqDto);

    Result<?> getCooperateCode(BaseUserReqDto reqDto);

    Result<?> test(String ss);

    Result<?> getPlateDraftPageList(PlateDraftPageReqDto reqDto);

    Result<?> delPlateDraft(DelPlateDraftReqDto reqDto);

    Result<?> operLogGet(OperLogGetReqDto reqDto);

    Result<?> savePlateSign(PlateSaveReqDto reqDto);

    Result<PlateInfoGetResultDto> plateInfoGet(PlateInfoGetReqDto reqDto);

    Result<?>  uploadFileAndStore(UploadFileReqDto reqDto);
    Result<?>  uploadFileAndStore2(UploadFileReqDto2 reqDto);

    Result<?> GetUploadInfoByPlateId(GetUpLoadInfoReqDto reqDto);

    Result<?> saveApply(GetUpLoadInfoReqDto reqDto);

    /**
     * 生成包车牌
     * @param reqDto
     * @return
     */
//    Result<?> generateCharterPlate(GenerateCharterPlateReqDto reqDto);

    Result<?> stopCharterPlate(StopCharterPlateReqDto reqDto);

    Result<?> plateArchivedAndCancel(PlateArchivedAndCancelReqDto reqDto);

    Result<?> plateArchivedAndCancel2(PlateArchivedAndCancelReqDto2 reqDto);

    /**
     * 修改任务状态
     * @param reqDto
     * @return
     */
    Result<?> taskUpdateState(PlateUpdateStatueReqDto reqDto);

    /**
     * 打印补打
     * @param reqDto
     * @return
     */
    Result<?> printSupplement(PlateUpdateStatueReqDto reqDto);

    void processReprintRetry();

    Result<?> plateInfoExport(PlateDraftPageReqDto exportReqDto);

    Result<?> exportRecord(ExportRecordReqDto exportReqDto);

    Result<?> printPlate(PlatePrintReqDto reqDto);

    Result<?> downloadPlate(PlatePrintReqDto reqDto);
}
